import json
import os
import re
from glob import glob


def merge_json_objects(input_dir, output_file):
    """
    合并目录下所有 _*.json 文件中的对象到单个列表

    :param input_dir: JSON文件所在目录
    :param output_file: 合并后的输出文件路径
    """
    merged_list = []

    # 获取所有符合 _数字.json 格式的文件
    files = glob(os.path.join(input_dir, "*_[0-9]*.json"))

    # 定义文件名数字提取函数
    def get_file_number(filename):
        match = re.search(r'_(\d+)\.json$', filename)
        return int(match.group(1)) if match else 0

    # 按数字顺序排序文件
    sorted_files = sorted(files, key=lambda x: get_file_number(x))

    # 处理每个文件
    for file_path in sorted_files:
        try:
            with open(file_path, 'r', encoding='utf-8') as f:
                content = json.load(f)

                # 确保内容是列表格式
                if isinstance(content, list):
                    merged_list.extend(content)
                    print(f"√ 已合并 {os.path.basename(file_path)} ({len(content)} 个对象)")
                else:
                    print(f"× 跳过 {os.path.basename(file_path)} (不是列表格式)")
        except json.JSONDecodeError:
            print(f"× 文件解析失败: {os.path.basename(file_path)}")
        except Exception as e:
            print(f"× 处理异常: {os.path.basename(file_path)} - {str(e)}")

    # 保存合并结果
    with open(output_file, 'w', encoding='utf-8') as f:
        json.dump(merged_list, f, indent=2, ensure_ascii=False)

    print(f"\n合并完成！共处理 {len(files)} 个文件")
    print(f"合并后包含 {len(merged_list)} 个对象")
    print(f"结果文件已保存至: {os.path.abspath(output_file)}")


# 使用示例
if __name__ == "__main__":
    # 输入目录（需要修改为实际路径）
    input_folder = r"D:\subtitle\goods_name"

    # 输出文件（需要修改为实际路径）
    output_json = r"D:\subtitle\goods_name\111.json"

    # 执行合并
    merge_json_objects(input_folder, output_json)